/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tela.edsc;

import ferramentas.CFG;
import ferramentas.DataUtil;
import ferramentas.DataUtil.DataFormat;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 *
 * @author ciar
 */
public class GeradorCSV_EDSC {

    private String textoCSV = "";

    public GeradorCSV_EDSC() {
        addCabecalho();
    }

    private void addCabecalho() {
        textoCSV = textoCSV.concat(
                "Nome;Inscrição;Endereço;Bairro;CEP;Cidade;Estado;Telefone (1);"
                + "Telefone (2);Celular;E-mail;Pai;Mãe;Data Nascimento;Sexo;"
                + "Nacionalidade;Estado Civil;RG;UF-RG;Data Emissão RG;CPF;"
                + "Título Eleitoral;UF-Título;Zona;Seção;Emissão Título;"
                + "Instituição (Graduação);Título;Especialidade;Início;Término;"
                + "Curriculum Lattes;Concorda com Edital;Cópia do RG;"
                + "Cópia do CPF;Cópia do Visto RNE;Graduado ou está concluindo;"
                + "Cópia do Diploma;"
                + "Cópia do Comprovante Conclusão;Cópia da Declaração;"
                + "Cópia do Contra-Cheque;Plano de trabalho;Motivacao;Horário\r\n");
    }

    public File gerarListaCSV(ResultSet inscritos, String caminhoArquivo) throws SQLException, UnsupportedEncodingException {
        while (inscritos.next()) {
            addUsuario(inscritos);
        }
        return geraArquivoCSV(caminhoArquivo);
    }

    private File geraArquivoCSV(String caminhoArquivo) throws UnsupportedEncodingException {
        File arquivo = new File(caminhoArquivo + getNomeArquivoCSV());
        try {
            PrintWriter pw = new PrintWriter(arquivo, "UTF-8");
            pw.write(textoCSV);
            pw.close();
            return arquivo;

        } catch (FileNotFoundException ex) {
            System.out.println("" + new Date() + " - Erro ao gravar arquivo: " + arquivo.getAbsolutePath() + "\n\tCaminho: " + caminhoArquivo);
            return null;
        }
    }

    public String getNomeArquivoCSV() {
        return "lista_inscritos.csv";
    }

    private void addUsuario(ResultSet inscrito) throws SQLException {
        boolean graduado = inscrito.getString("graduacao").equalsIgnoreCase("graduado") ? true : false;
        textoCSV = textoCSV.concat(""
                + inscrito.getString("nome").replaceAll(";", ",") + ";"
                + inscrito.getInt("inscricao") + ";"
                + inscrito.getString("endereco").replaceAll(";", ",") + ";"
                + inscrito.getString("bairro").replaceAll(";", ",") + ";"
                + inscrito.getString("cep").replaceAll(";", ",") + ";"
                + inscrito.getString("cidade").replaceAll(";", ",") + ";"
                + inscrito.getString("estado").replaceAll(";", ",") + ";"
                + inscrito.getString("telefone1").replaceAll(";", ",") + ";"
                + inscrito.getString("telefone2").replaceAll(";", ",") + ";"
                + inscrito.getString("celular").replaceAll(";", ",") + ";"
                + inscrito.getString("email").replaceAll(";", ",") + ";"
                + inscrito.getString("pai").replaceAll(";", ",") + ";"
                + inscrito.getString("mae").replaceAll(";", ",") + ";"
                + DataUtil.converterData(inscrito.getDate("nascimento"), DataFormat.DDMMAAAA).replaceAll(";", ",") + ";"
                + (inscrito.getString("sexo").equals("m") ? "Masculino" : "Feminino") + ";"
                + inscrito.getString("nacionalidade").replaceAll(";", ",") + ";"
                + inscrito.getString("estado_civil").replaceAll(";", ",") + ";"
                + inscrito.getString("rg").replaceAll(";", ",") + ";"
                + inscrito.getString("uf_rg").replaceAll(";", ",") + ";"
                + DataUtil.converterData(inscrito.getDate("emissao_rg"), DataFormat.DDMMAAAA).replaceAll(";", ",") + ";"
                + inscrito.getString("cpf").replaceAll(";", ",") + ";"
                + inscrito.getString("titulo").replaceAll(";", ",") + ";"
                + inscrito.getString("uf_titulo").replaceAll(";", ",") + ";"
                + inscrito.getString("zona_titulo").replaceAll(";", ",") + ";"
                + inscrito.getString("secao_titulo").replaceAll(";", ",") + ";"
                + DataUtil.converterData(inscrito.getDate("emissao_titulo"), DataFormat.DDMMAAAA).replaceAll(";", ",") + ";"
                + inscrito.getString("instituicao_formacao").replaceAll(";", ",") + ";"
                + inscrito.getString("titulo_formacao").replaceAll(";", ",") + ";"
                + inscrito.getString("especialidade_formacao").replaceAll(";", ",") + ";"
                + DataUtil.converterData(inscrito.getDate("inicio_formacao"), DataFormat.MMAAAA).replaceAll(";", ",") + ";"
                + DataUtil.converterData(inscrito.getDate("termino_formacao"), DataFormat.MMAAAA).replaceAll(";", ",") + ";"
                + inscrito.getString("linklattes").replaceAll(";", ",") + ";"
                + (inscrito.getBoolean("li_edital") ? "Sim" : "Não") + ";"
                + getLinkCopiaRG(inscrito.getString("arquivo_copia_rg")).replaceAll(";", ",") + ";"
                + getLinkCopiaCPF(inscrito.getString("arquivo_copia_cpf")).replaceAll(";", ",") + ";"
                + getLinkCopiaVisto(inscrito.getString("arquivo_copia_visto")).replaceAll(";", ",") + ";"
                + (graduado ? "Graduado" : "Está concluindo") + ";"
                + getLinkCopiaDiploma(inscrito.getString("arquivo_copia_diploma"), graduado).replaceAll(";", ",") + ";"
                + getLinkCopiaComprovante(inscrito.getString("arquivo_copia_comprovante"), graduado).replaceAll(";", ",") + ";"
                + getLinkCopiaDeclaracao(inscrito.getString("arquivo_copia_declaracao")).replaceAll(";", ",") + ";"
                + getLinkCopiaProjeto(inscrito.getString("arquivo_copia_contracheque")).replaceAll(";", ",") + ";"
                + getLinkCopiaProjeto(inscrito.getString("arquivo_copia_projeto")).replaceAll(";", ",") + ";"
                + getLinkCopiaMotivacao(inscrito.getString("arquivo_motivacao")).replaceAll(";", ",") + ";"
                + DataUtil.converterData(new Date(inscrito.getTimestamp("data_inscricao").getTime()), DataFormat.DDMMAAAAHHMMSS).replaceAll(";", ",") + ""
                + "\r\n");
    }
    private String caminhoDocumentos = "http://mercurio.ciar.ufg.br:8080/bridge_files/documentos/" + CFG.DIRETORIO_DOCUMENTOS_EDSC + "/";

    private String getLinkCopiaRG(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_RG, nomeArquivo);
    }

    private String getLinkCopiaCPF(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_CPF, nomeArquivo);
    }

    private String getLinkCopiaVisto(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_VISTO, nomeArquivo);
    }

    private String getLinkCopiaDiploma(String nomeArquivo, boolean graduado) {
        if (graduado) {
            return getLink(caminhoDocumentos + CFG.EDSC_DIPLOMA, nomeArquivo);
        } else {
            return "---";
        }
    }

    private String getLinkCopiaHistorico(String nomeArquivo, boolean graduado) {
        if (graduado) {
            return getLink(caminhoDocumentos + CFG.EDSC_HISTORICO, nomeArquivo);
        } else {
            return "---";
        }
    }

    private String getLinkCopiaComprovante(String nomeArquivo, boolean graduado) {
        if (!graduado) {
            return getLink(caminhoDocumentos + CFG.EDSC_COMPROVANTE, nomeArquivo);
        } else {
            return "---";
        }
    }

    private String getLinkCopiaDeclaracao(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_DECLARACAO, nomeArquivo);
    }

    private String getLinkCopiaContraCheque(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_CONTRACHEQUE, nomeArquivo);
    }

    private String getLinkCopiaProjeto(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_PROJETO, nomeArquivo);
    }

    private String getLinkCopiaMotivacao(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.EDSC_MOTIVACAO, nomeArquivo);
    }

    private String getLink(String diretorio, String nomeArquivo) {
        if (nomeArquivo != null) {
            return diretorio + "/" + nomeArquivo;
        } else {
            return "Não enviado";
        }
    }
}
